home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 280_01 / translit.c < prev    next >
Text File  |  1989-01-11  |  3KB  |  110 lines

  1. /* [TRANSLIT.C of JUGPDS Vol.46] */
  2. /*
  3. *****************************************************************
  4. *                                *
  5. *    Written by  Hakuo Katayose (JUG-CP/M No.179)        *
  6. *            49-114 Kawauchi-Sanjuunin-machi        *
  7. *            Sendai, Miyagi 980                          *
  8. *            Phone: 0222-61-3219                *
  9. *                                *
  10. *       Modifird by Toshiya Oota   (JUG-CPM No.10)              *
  11. *                   Sakae ko-po 205                 *
  12. *            5-19-6 Hosoda                *
  13. *            Katusikaku Tokyo 124            *
  14. *                                *
  15. *        for MS-DOS Lattice C V3.1J & 80186/V20/V30    *
  16. *                                *
  17. *    Compiler Option: -cc -k0(1) -ms -n -v -w        *
  18. *                                *
  19. *    Edited & tested by Y. Monma (JUG-CP/M Disk Editor)    *
  20. *            &  T. Ota   (JUG-CP/M Sub Disk Editor)    *
  21. *                                *
  22. *****************************************************************
  23. */
  24.  
  25. /* Library functions for Software Tools */
  26.  
  27. #include "stdio.h"
  28. #include "dos.h"
  29. #include "ctype.h"
  30. #include "tools.h"
  31. #include "toolfunc.h"
  32.  
  33. #define    UBUFSIZE    64
  34.  
  35. /* translit - map characters */
  36.  
  37. int    debug;                    /* debug switch */
  38.  
  39. void main(argc, argv)
  40. int    argc;
  41. char    *argv[];
  42.  
  43. {
  44. char    from[MAXSET], to[MAXSET], *ap;
  45. int    c, allbut, collap, i, lastto;
  46. void error();
  47. int makset(),xindex();    
  48.  
  49.     debug = NO;
  50.     if(argc < 2)
  51.         error("TRA901 Usage: >translit from to (-d)\n");
  52.     ap = argv[1];
  53.     if (*ap == NOT) {
  54.         allbut = YES;
  55.         ap++;
  56.         }
  57.     else
  58.         allbut = NO;
  59.     if (makset(ap, 0, from, MAXSET) == NO)
  60.         error("TRA902 from: too large.\n");
  61.     ap = argv[2];
  62.     if (argc == 2)
  63.         to[0] = EOS;
  64.     else if (makset(ap, 0, to, MAXSET) == NO)
  65.         error("TRA903 to: too large.\n");
  66.     if(argc ==4)
  67.         if( *(argv[3]) == '-' && tolower(*(argv[3]+1)) == 'd')
  68.             debug =YES;
  69.     lastto = strlen(to);
  70.     collap = ( (strlen(from) > lastto || allbut == YES) ? YES : NO );
  71.     lastto--;
  72.     if(debug) {                /* append 1986-11-26 */
  73.         fprintf(stderr,"\nTRS801 Debug data for translit");
  74.         fprintf(stderr,"\n       from = %s",from);
  75.         fprintf(stderr,"\n       to   = %s",to);
  76.         fprintf(stderr,"\n       YES  = %d , NO = %d",YES,NO);
  77.         fprintf(stderr,"\n       lastto = %d , collap = %d ,allbut = %d\n"
  78.                   , lastto ,collap ,allbut );
  79.     }
  80.     FOREVER {
  81.         i = xindex(from, (c=getchar()), allbut, lastto);
  82.         if(debug) {
  83.             printf("\nTRS802 Debug data for translit");
  84.             printf("\n       i = %d , c = %x ",i ,c);
  85.             }
  86.         if (collap == YES && i >= lastto && lastto >= 0) {
  87.             putchar(to[lastto]);
  88.             while((    i= xindex(from, (c=getchar()), allbut, lastto))                 >= lastto);
  89.             }
  90.         if (c == EOF)
  91.             break;
  92.         if (i >= 0 && lastto >= 0)
  93.             putchar(to[i]);
  94.         else if (i == ERROR)
  95.             putchar(c);
  96.         }
  97. }
  98.  
  99. int  makset(array, k, set, size)
  100. char *array, *set;
  101.  
  102. {
  103. int    i, j;
  104.  
  105.     i = k;
  106.     j = 0;
  107.     filset(EOS, array, &i, set, &j, size);
  108.     return (addset(EOS, set, &j, size));
  109. }
  110.